<?php
/**
 * Основные константы класса
 */
define ( 'MYSQL_SONE', 0 );
define ( 'MYSQL_SALL', 1 );
define ( 'MYSQL_SNUM', MYSQL_NUM );
define ( 'MYSQL_SASSOC', MYSQL_ASSOC );
define ( 'MYSQL_SQUERY', 2 );
/**
 * 
 * Класс работы с MySQL
 * @author mr.Pie
 *
 */
class MySQL {
	/** Параметры работы с MySQL */
	private static $db;
	private static $connect;
	/** ID последней добавленной записи*/
	private static $last_ID;
	/** Последний SQL запрос */
	private static $last_SQL;
	/**  ID последней MySQL ошибки */
	private static $error_ID;
	/**  Сообщение последней MySQL ошибки */
	private static $error_msg;
	
	/**
	 * Инициализация
	 */
	static function Create() {
		// установка связи MySQL
		self::$db = mysqli_connect(Conf::$db ['host'], Conf::$db['user'], Conf::$db ['pass'], Conf::$db['name']);
		if (!self::$db) {return FALSE;}
		// настройка
		self::$connect = self::Query('SET NAMES "utf8" COLLATE "utf8_general_ci"');
		return self::$connect;
	}
	/**
	 * Выполнение SQL запросов к БД
	 */
	static function Query($query_sql) {
		// замена префикса и имени БД
		$query_sql = strtr($query_sql, array('{p}' => Conf::$db ['pref'], '{name}' => Conf::$db ['name']));
		// запоминание запроса
		self::$last_SQL = $query_sql;
		// выполнение запроса к БД
		$_QUERY = mysqli_query(self::$db, $query_sql);
		if (! $_QUERY) {
			// сохранение ошибки
			self::$error_ID  = mysqli_errno(self::$db);
			self::$error_msg = mysqli_error(self::$db);
			return FALSE;
		}
		// ID последней добавленной записи
		if (stripos($query_sql, 'INSERT') !== FALSE) {
			self::$last_ID = mysqli_insert_id(self::$db);
		}
		return $_QUERY;
	}
	/**
	 * Выбор информации из таблицы
	 */
	static function Select($query_sql, $query_count = MYSQL_SONE, $fetch_type = MYSQL_ASSOC) {
		// выполнение запроса
		$_QUERY = self::Query ($query_sql);
		if ($_QUERY) {
			if ($query_count == MYSQL_SQUERY) {return array (0 => $_QUERY, 1 => $fetch_type );}
			$return_array = array ();
			if ($query_count == MYSQL_SONE) {$return_array = mysqli_fetch_array ( $_QUERY, $fetch_type );} 
			else {
				while (($item = mysqli_fetch_array($_QUERY, $fetch_type)) !== NULL) {
					$return_array[] = $item;
				}
			}
			mysqli_free_result($_QUERY);
			return $return_array;
		}
		return FALSE;
	}
	/**
	 * Выделение из БД оперделенного количества элементов
	 */
	static function Select_limit($query_sql, $start, $perpage, $query_count = MYSQL_SALL, $fetch_type = MYSQL_ASSOC) {
		return self::Select ( $query_sql . ' LIMIT ' . $start . ', ' . $perpage, $query_count, $fetch_type );
	}
	/**
	 * Построчная выборка
	 */
	static function Fetch_array($query_link, $fetch_type = NULL) {
		if (! $fetch_type) {
			$fetch_type = $query_link [1];
		}
		$row = mysqli_fetch_array ( $query_link [0], $fetch_type );
		if ($row === FALSE) {
			mysqli_free_result ( $query_link [0] );
			return FALSE;
		}
		return $row;
	}
	static function LAST_ID() {
		return $this->_LAST_ID;
	}
	static function Last_SQL() {
		return self::$last_SQL;
	}
	static function ERROR_MSG() {
		return $this->_ERR_N . ': ' . $this->_ERR_MSG;
	}
	static function close() {
		mysqli_close ( $this->db_connnect );
	}
	static function Connected() {
		return self::$connect;
	}
}
?>
